package com.personalink.common.dto;

import com.fasterxml.jackson.annotation.JsonInclude;
import jakarta.validation.constraints.NotBlank;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 聊天请求DTO
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ChatRequest {
    
    /**
     * 用户ID
     */
    @NotBlank(message = "用户ID不能为空")
    private String userId;
    
    /**
     * 会话ID
     */
    private String sessionId;
    
    /**
     * 文本内容
     */
    private String text;
    
    /**
     * 图像数据（Base64编码）
     */
    private String imageData;
    
    /**
     * 语音数据（Base64编码）
     */
    private String voiceData;
    
    /**
     * 输入类型（text, image, voice, multimodal）
     */
    @NotBlank(message = "输入类型不能为空")
    private String inputType;
    
    /**
     * 请求选项
     */
    private ChatOptions options;
    
    /**
     * 上下文信息
     */
    private Map<String, Object> context;
    
    /**
     * 聊天选项配置
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @JsonInclude(JsonInclude.Include.NON_NULL)
    public static class ChatOptions {
        
        /**
         * 是否使用记忆上下文
         */
        private Boolean useMemory = true;
        
        /**
         * 期望的输出模态
         */
        private List<String> modalities;
        
        /**
         * 最大响应长度
         */
        private Integer maxLength;
        
        /**
         * 温度参数（创造性）
         */
        private Double temperature;
        
        /**
         * 是否流式输出
         */
        private Boolean streaming = false;
        
        /**
         * 语音合成配置
         */
        private VoiceConfig voiceConfig;
        
        /**
         * 图像生成配置
         */
        private ImageConfig imageConfig;
    }
    
    /**
     * 语音配置
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class VoiceConfig {
        private String voiceType;
        private String emotion;
        private Double speed = 1.0;
        private Double pitch = 1.0;
    }
    
    /**
     * 图像配置
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ImageConfig {
        private String style;
        private String size = "512x512";
        private Integer quality = 80;
    }
}